function decoded_private = decode_private_stream(received_private, channel, ...
    precoding, user_idx, power_private)
% decode_private_stream - 解码RSMA系统中的用户私有流
%
% 输入参数:
%   received_private - 去除公共流后的接收信号
%   channel          - 用户的信道矩阵
%   precoding        - 预编码结构体
%   user_idx         - 当前用户索引
%   power_private    - 私有流功率分配系数
%
% 输出参数:
%   decoded_private  - 解码后的私有流

% 获取参数
[num_rx_antennas, signal_length] = size(received_private);

% 获取该用户私有流的预编码向量
w_k = precoding.private{user_idx};

% 在RSMA中，接收机在解码完公共流并减去其贡献后，解码自己的私有流
% 这里使用MMSE(最小均方误差)接收机解码私有流

% 计算私有流的有效信道
h_eff_k = channel * w_k;

% 计算干扰加噪声协方差矩阵
% 干扰来源：其他用户的私有流（假设公共流已完美移除）
R_in = eye(num_rx_antennas);  % 初始化为噪声协方差矩阵

% 添加剩余干扰 - 在实际系统中可能存在公共流SIC不完美导致的残余干扰
% 以及信道估计误差等
% 这里为简化，我们只考虑噪声

% 设计MMSE接收机
g_k = (h_eff_k' * inv(R_in))' / (h_eff_k' * inv(R_in) * h_eff_k);

% 应用接收机解码私有流
decoded_private_raw = g_k' * received_private;

% 符号归一化（如果需要）
decoded_private = decoded_private_raw / sqrt(power_private);

% 在实际系统中，这里会进行信道解码等进一步处理
% 为简化起见，我们直接输出经过解码的符号流

end 